/**
 * 
 */
package co.gov.medellin.sdep.sisdep.gestion.service;

import java.util.List;

import co.gov.medellin.sdep.sisdep.common.message.MessageDescriptorConstant;
import co.gov.medellin.sdep.sisdep.common.service.BaseService;
import co.gov.medellin.sdep.sisdep.gestion.exception.SensibilizacionException;
import co.gov.medellin.sdep.sisdep.gestion.exception.SensibilizacionRuntimeException;
import co.gov.medellin.sdep.sisdep.gestion.exception.descriptor.SensibilizacionMessageDescriptor;
import co.gov.medellin.sdep.sisdep.model.Sensibilizacion;
import co.gov.medellin.sdep.sisdep.model.dao.impl.ISensibilizacionDAOT;

/**
 * @author acespedes
 * 
 */
public class SensibilizacionServiceImpl extends BaseService implements
		ISensibilizacionService {

	// ----------------------------------------------------------------------
	// --- propiedades y constructores init()
	// ----------------------------------------------------------------------

	/**
	 * default serial version
	 */
	private static final long serialVersionUID = 1L;
	/** */
	private ISensibilizacionDAOT sensibilizacionDAO;

	/**
	 * 
	 */
	public SensibilizacionServiceImpl() {
	}

	// ----------------------------------------------------------------------
	// --- propiedades y constructores end()
	// ----------------------------------------------------------------------

	// ----------------------------------------------------------------------
	// --- implementacion de metodos para acciones init()
	// ----------------------------------------------------------------------

	/**
	 * 
	 */
	public void insert(Sensibilizacion sensibilizacion)
			throws SensibilizacionException {
		try {
			sensibilizacion.setUsuarioCrea(getPrincipalUser());
//			sensibilizacion.setIdArea(new Long(sensibilizacion.getIdAreaStr()));
//			sensibilizacion.setIdSensibilizacionTipo(new Long(sensibilizacion.getIdSensibilizacionTipoStr()));
			getSensibilizacionDAO().insert(sensibilizacion);
		} catch (Exception e) {
			Object[] infoError = { sensibilizacion.getCodigo() };
			if (e.getCause().toString().indexOf("UNIQUE KEY") >= 0) {
				throw new SensibilizacionException(
						new SensibilizacionMessageDescriptor(
								MessageDescriptorConstant.UK_VIOLATION),
						infoError, e);
			} else {
				throw new SensibilizacionException(
						new SensibilizacionMessageDescriptor(
								MessageDescriptorConstant.SAVE), infoError, e);
			}
		}
	}

	/**
	 * 
	 */
	public final void update(Sensibilizacion sensibilizacion)
			throws SensibilizacionException {
		try {
			sensibilizacion.setUsuarioModifica(getPrincipalUser());
			//sensibilizacion.setFechaModifica(new Date());
			getSensibilizacionDAO().update(sensibilizacion);
		} catch (Exception e) {
			Object[] infoError = { sensibilizacion.getCodigo() };
			if (e.getCause().toString().indexOf("UNIQUE KEY") >= 0) {
				throw new SensibilizacionRuntimeException(
						new SensibilizacionMessageDescriptor(
								MessageDescriptorConstant.UK_VIOLATION),
						infoError, e);
			} else {
				throw new SensibilizacionRuntimeException(
						new SensibilizacionMessageDescriptor(
								MessageDescriptorConstant.UPDATE), infoError, e);
			}
		}
	}

	/**
	 * 
	 */
	public final void delete(Sensibilizacion sensibilizacion)
			throws SensibilizacionException {
		try {
			sensibilizacion.setUsuarioModifica(getPrincipalUser());
			//sensibilizacion.setFechaModifica(new Date());
			getSensibilizacionDAO().delete(sensibilizacion);
		} catch (Exception e) {
			Object[] infoError = { sensibilizacion.getCodigo() };
			throw new SensibilizacionRuntimeException(
					new SensibilizacionMessageDescriptor(
							MessageDescriptorConstant.DELETE), infoError, e);
		}
	}

	/**
	 * @return
	 * 
	 */
	public final List load(int start, int max, Sensibilizacion sensibilizacion)
			throws SensibilizacionException {
		try {
			sensibilizacion.setIdSensibilizacionTipo(new Long(sensibilizacion.getIdSensibilizacionTipoStr()));
			sensibilizacion.setIdArea(new Long(sensibilizacion.getIdAreaStr()));
			return getSensibilizacionDAO().load(sensibilizacion);
		} catch (Exception e) {
			Object[] infoError = null;
			throw new SensibilizacionRuntimeException(
					new SensibilizacionMessageDescriptor(
							MessageDescriptorConstant.RETRIEVE), infoError, e);
		}
	}

	/**
	 * 
	 */
	public final Sensibilizacion get(long id) throws SensibilizacionException {
		try {
			return getSensibilizacionDAO().findByPrimaryKey(id);
		} catch (Exception e) {
			Object[] infoError = { new Long(id) };
			throw new SensibilizacionRuntimeException(
					new SensibilizacionMessageDescriptor(
							MessageDescriptorConstant.GET), infoError, e);
		}
	}
	
	/**
	 * 
	 */
	public final String getLastSequenceValue() {
		try {
			return getSensibilizacionDAO().getLastSequenceValue();
		} catch (Exception e) {
			Object[] infoError = { "GES_SENSIBILIZACION_T_SEC" };
			throw new SensibilizacionRuntimeException(
					new SensibilizacionMessageDescriptor(
							MessageDescriptorConstant.GET), infoError, e);
		}
	}
	
	//TOUCH

	// ----------------------------------------------------------------------
	// --- implementacion de metodos para acciones end()
	// ----------------------------------------------------------------------

	// ----------------------------------------------------------------------
	// --- getters and setters init()
	// ----------------------------------------------------------------------

	/**
	 * @author Usuario
	 * 
	 */
	public ISensibilizacionDAOT getSensibilizacionDAO() {
		return sensibilizacionDAO;
	}

	/**
	 * @author Usuario
	 * 
	 */
	public void setSensibilizacionDAO(ISensibilizacionDAOT sensibilizacionDAO) {
		this.sensibilizacionDAO = sensibilizacionDAO;
	}

	// ----------------------------------------------------------------------
	// --- getters and setters end()
	// ----------------------------------------------------------------------

}
